/* eslint-disable no-constant-condition */

// 封装精确的获取数据类型
function getType(source) {
  return Object.prototype.toString.call(source).slice(8, -1);
}

// 封装一个深拷贝的函数
function deepCopy(source) {
  // source 给一个资源数据，返回复制好的对象
  // 1.判断如果是数组，创建一个空数组，如果是对象，创建一个对象，其他直接返回
  let res = null;
  if (getType(source) === "Array") {
    res = [];
  } else if (getType(source) === "Object") {
    res = {};
  } else {
    return source;
  }

  // 2.循环赋值
  for (const key in source) {
    if (getType(source[key]) === "Array" || "Object") {
      // 如果要复制的值还是一个数组，或者是一个对象，直接等于就还是一个浅拷贝，
      res[key] = deepCopy(source[key]); // 如果数组赋值还是一个对象
    } else {
      res[key] = source[key];
    }
  }
  return res;
}

export { getType, deepCopy };
